package com.itany.corejava.code08_常用类.string;

import java.util.Arrays;

/**
 * @author 石小俊
 * @date 2023年04月26日 13:42
 */
public class Test08_正则表达式 {

    public static void main(String[] args) {
        System.out.println("************************正则表达式规则************************");
        // 匹配字符串中是否只有一个a
        System.out.println("a".matches("a"));
        // 匹配字符串中是否只有3个b
        System.out.println("bbbb".matches("b{3}"));
        // 匹配字符串中是否有3-5个c
        System.out.println("ccccc".matches("c{3,5}"));
        // 匹配字符串至少有5个d
        System.out.println("ddddddddddddddddddd".matches("d{5,}"));
        // 匹配字符串至少出现一个e
        System.out.println("eeeeee".matches("e{1,}"));
        System.out.println("e".matches("e+"));
        // 匹配字符串出现0或1次e
        System.out.println("ee".matches("e{0,1}"));
        System.out.println("".matches("e?"));
        // 匹配字符串出现0或多次a
        System.out.println("a".matches("a{0,}"));
        System.out.println("aaaaa".matches("a*"));

        // 匹配指定字符串只有一个字符,且只能abc中的一个
        System.out.println("a".matches("[abc]"));
        System.out.println("abcaa".matches("[abc]{3,5}"));

        // 匹配所有数字
        System.out.println("1".matches("[0-9]"));
        System.out.println("a".matches("[a-z]"));
        System.out.println("Z".matches("[A-Z]"));
        // 所有英文字母和数字
        System.out.println("a".matches("[0-9a-zA-Z]"));
        // 匹配除了换行符以外的任意字符
        System.out.println("\t".matches("."));
        // 匹配字符.
        System.out.println(".".matches("\\."));
        // 匹配所有数字
        System.out.println("3".matches("\\d"));
        // 匹配任意个数字
        System.out.println("332131".matches("\\d+"));
        // 匹配非数字
        System.out.println("1".matches("\\D"));

        // 匹配英文字母、数字、下划线
        System.out.println("_".matches("\\w+"));
        System.out.println("!".matches("\\W+"));

        // 匹配空格
        System.out.println(" ".matches("\\s"));
        System.out.println("1".matches("\\S"));

        // 匹配3位或者5位数字
        System.out.println("21345".matches("\\d{3}|\\d{5}"));
        System.out.println("123".matches("\\d{3}(\\d{2})?"));

        System.out.println("************************replaceAll************************");
        // 将所有的连续的数字位置替换成一个空格
        System.out.println("Hello123World32121I654am2132131admin".replaceAll("\\d+", " "));
        // 将每一个数字都替换成一个空格
        System.out.println("Hello123World32121I654am2132131admin".replaceAll("\\d", " "));
        // 将所有连续的2个数字替换成*
        // 此时如果存在奇数个数字,则替换先匹配到的,保留最后一个数字
        System.out.println("Hello123World32121I654am2132131admin".replaceAll("\\d{2}", " "));

        System.out.println("************************replaceFirst************************");
        // 替换第一个数字
        System.out.println("Hello123World32121I654am2132131admin".replaceFirst("\\d", " "));

        System.out.println("************************split************************");
        // 根据连续出现的数字对指定字符串进行分割,分割成数组
        String[] arr = "Hello123World32121I654am2132131admin".split("\\d+");
        System.out.println(Arrays.toString(arr));

        String[] arr2 = "Hello@12!33World!@#123I!@!am_213@admin".split("[0-9!@#_]+");
        System.out.println(Arrays.toString(arr2));
    }

}
